package menuimpl

import (
	menu "go-caipu/pkg/services/admin/menu"
)

//	func menuCall(menus []menu.Menu, parent menu.Menu) menu.MainMenu {
//		min := make([]menu.MainMenu, 0)
//		var menu = generate(parent)
//		for i := 0; i < len(menus); i++ {
//			if parent.MenuId != menus[i].ParentId {
//				continue
//			}
//			mi := generate(menus[i])
//			mi.Redirect = menus[i].Path //赋值
//			if menus[i].MenuType != Button {
//				ms := menuCall(menus, menus[i])
//				min = append(min, ms)
//			} else {
//				min = append(min, mi)
//			}
//		}
//		if len(min) > 0 {
//			menu.Children = &min
//		}
//		return menu
//	}
func generate(dt menu.Menu) menu.MainMenu {
	mi := menu.MainMenu{}
	mi.MenuId = dt.MenuId
	mi.Title = dt.Title
	mi.ParentId = dt.ParentId
	mi.Type = dt.MenuType
	mi.Path = dt.Path
	mi.Name = dt.MenuName
	mi.Component = dt.Component
	mi.Redirect = dt.Redirect
	mi.Icon = dt.Icon
	mi.IsExternal = true
	mi.Hidden = dt.Visible
	mi.IsCache = dt.NoCache
	//mi.Roles = dt.Auths
	mi.Order = dt.Sort
	mi.Status = 1
	mi.Children = nil
	return mi
}

// Menu 菜单中的类型枚举值
const (
	// Directory 目录
	Directory int = 1
	// Menu 菜单
	Menu int = 2
	// Button 按钮
	Button int = 3
)

func FindMenuAndDescendants(menus []menu.Menu, menuID int64) []menu.Menu {
	var result []menu.Menu

	// 首先查找目标菜单项
	for _, menu := range menus {
		if menu.MenuId == menuID {
			result = append(result, menu)
			break
		}
	}

	// 递归查找所有子菜单项
	findAndAppendChildren(menus, menuID, &result)

	return result
}

func findAndAppendChildren(allMenus []menu.Menu, parentID int64, result *[]menu.Menu) {
	for _, menu := range allMenus {
		if menu.ParentId == parentID {
			*result = append(*result, menu)
			// 递归查找当前菜单的子菜单
			findAndAppendChildren(allMenus, menu.MenuId, result)
		}
	}
}
